export class LatLng {
  lat;
  lng;
  alt;

  /**
   *
   * @param {*} lat 纬度
   * @param {*} lng 经度 (值大的那个)
   * @param {*} alt 海拔
   * @returns
   */
  constructor(lat, lng, alt) {
    if (isNaN(lat) || isNaN(lng)) {
      throw new Error(`Invalid LatLng object: (${lat}, ${lng})`);
    }

    this.lat = +lat;

    this.lng = +lng;
    if (alt !== undefined) {
      this.alt = +alt;
    }
    return this;
  }
  clone() {
    return new LatLng(this.lat, this.lng, this.alt);
  }
}

export function toLatLng(a, b, c) {
  if (a instanceof LatLng) {
    return a;
  }
  if (Array.isArray(a) && typeof a[0] !== "object") {
    if (a.length === 3) {
      return new LatLng(a[0], a[1], a[2]);
    }
    if (a.length === 2) {
      return new LatLng(a[0], a[1]);
    }
    return null;
  }
  if (a === undefined || a === null) {
    return a;
  }
  if (typeof a === "object" && "lat" in a) {
    return new LatLng(a.lat, "lng" in a ? a.lng : a.lon, a.alt);
  }
  if (b === undefined) {
    return null;
  }
  return new LatLng(a, b, c);
}

